package main

import (
	"fmt"
	"math"
)

/*
	练习一:
	1.初始go,hello world
	2.基础数据类型
	3.运算符
	4.进制转换
	5.switch...case结构
	6.for循环
	7.break关键字使用
*/

func main() {
	fmt.Println("hello world!")
	/*
		1.使用一句话输出语句，达到输入如下要求
			姓名  年龄  籍贯  住址
		    john  12  河北  北京
	*/
	fmt.Print("姓名\t 年龄\t 籍贯\t 住址\n二狗\t 20\t 河北\t 北京")
	// 2.类型转换
	var n1 int = 20
	var n2 int32
	var n3 int64

	n2 = int32(n1) + 15
	n3 = int64(1) + 3
	fmt.Println(n1, n2, n3)

	//3.97天是多少个星期零几天
	var days = 97
	var weekNum = days / 7
	var daysNum = days % 7
	fmt.Printf("97天是%d个星期零%d天\n", weekNum, daysNum)

	//4.华氏温度转摄氏温度:5/9*(华氏温度-100),求华氏温度对应的摄氏温度
	var huashi float32 = 160.5
	var sheshi float32 = 5.0 / 9.0 * (huashi - 100)
	fmt.Printf("%v 华氏温度对应的摄氏温度是:%v\n", huashi, sheshi)

	/*	二进制转十进制:110001100 = 1*2*2 + 1*2*2*2 + 1*2*2*2*2*2*2*2 + 1*2*2*2*2*2*2*2 = 4+8+128+256=396
		八进制转十进制:02456 = 6*1 + 5*8 + 4*8*8 + 2*8*8*8 = 1326
		十六进制转十进制:0xA54 = 4*1 + 5*16 + 10*16*16 = 2644

		十进制转二进制:56 = 111000
		十进制转八进制:156 = 0234
		十进制转十六进制:356 = 164

		二进制转八进制:11100101 = 0345
		二进制转十六进制:1110010110 = 0x396
	*/

	/*
	 求ax^2+bx+c=0方程的根,abc分别是函数的参数,如果b^2-4ac>0,则有两个解,如果b^2-4ac=0,则有一个解,b^2-4ac<0,无解
	*/
	var a float64 = 2
	var b float64 = 3
	var c float64 = 6
	var x1, x2 = cul(a, b, c)
	fmt.Println(x1, x2)

	/*
		使用switch把小写类型的char型转换为大写,只转换a,b,c,d,e,其他的输出other
	*/
	//var char byte
	//fmt.Println("请输入一个字母....")
	//fmt.Scanf("%c", &char)
	//
	//switch char {
	//case 'a':
	//	fmt.Println("A")
	//case 'b':
	//	fmt.Println("B")
	//case 'c':
	//	fmt.Println("C")
	//case 'd':
	//	fmt.Println("D")
	//case 'e':
	//	fmt.Println("E")
	//default:
	//	fmt.Println("other")
	//}

	/*
		学生成绩大于60份的输出合格,低于60分的输出不合格,输入成绩不能大于100分
	*/
	//var score float64
	//fmt.Println("请输入成绩...")
	//fmt.Scanf("%f", &score)
	//
	//switch int(score / 60) {
	//case 1:
	//	fmt.Println("成绩合格")
	//case 0:
	//	fmt.Println("成绩不合格")
	//default:
	//	fmt.Println("输入成绩有误!")
	//
	//}

	/*
		输入指定月份,打印该月份所属季节
	*/
	//var month int
	//fmt.Println("请输入月份...")
	//_, err := fmt.Scanf("%d", &month)
	//if err != nil {
	//	return
	//}
	//
	//switch month {
	//case 3, 4, 5:
	//	fmt.Println("春季")
	//case 6, 7, 8:
	//	fmt.Println("夏季")
	//case 9, 10, 11:
	//	fmt.Println("秋季")
	//default:
	//	fmt.Println("冬季")
	//
	//}

	/*
		打印1~100之间所有9的倍数的整数的个数及总和
	*/
	var sum, count = 0, 0
	for i := 1; i <= 100; i++ {
		if i%9 == 0 {
			sum += i
			count++
		}
	}
	fmt.Printf("个数:%d,总和:%d\n", count, sum)

	/*
		打印99乘法表
	*/
	for i := 1; i <= 9; i++ {
		for j := 1; j <= i; j++ {
			fmt.Printf("%d x %d = %d\t", j, i, i*j)
		}
		fmt.Println()
	}

	/*
		100以内的数求和,求出当和第一次大于20时的当前数
	*/
	var culSum = 0
	for i := 1; i <= 100; i++ {
		culSum += i
		if culSum >= 20 {
			fmt.Printf("当culSum>=20时,当前数为:%v\n", i)
			break
		}
	}

	/*
		实现登陆验证,三次机会,如果用户名为"张无忌",密码"888",提示登陆成功,否则提示还有几次机会
	*/
	var username string
	var password string
	var loginChance = 3
	for i := 1; i <= 100; i++ {
		fmt.Println("请输入用户名...")
		fmt.Scanf("%s", &username)
		fmt.Println("请输入密码...")
		fmt.Scanf("%s", &password)

		if username == "张无忌" && password == "888" {
			fmt.Println("登陆成功...")
			break
		} else {
			loginChance--
			fmt.Printf("你还有%d次机会\n", loginChance)
		}
	}
	if loginChance == 0 {
		fmt.Print("登陆机会已用光\n")
	}

}

func cul(a, b, c float64) (float64, float64) {
	var x1, x2 float64
	n := b*b - 4*a*c
	if n > 0 {
		x1 = (-b + math.Sqrt(n)) / 2 * a
		x2 = (-b - math.Sqrt(n)) / 2 * a
		fmt.Println(x1, x2)
	} else if n == 0 {
		x1 = (-b + math.Sqrt(n)) / 2 * a
		x1 = x2
		fmt.Println(x1)
	} else {
		fmt.Println("无解...")
	}
	return x1, x2
}
